\chapter{Použité technologie}
\label{chap:technologies}

Tato kapitola obsahuje přehled technologií, komponent a nástrojů třetích stran, které byly použity v této
práci.

\section[Java]{Java\footnote{\url{http://java.com/en/}}}

Pro implementaci API jsme pro jeho dostupnost na mnoha platformách zvolili programovací jazyk {\java}
a platformu Java SE (verze 1.7\footnote{Během vývoje jsme používali verzi 1.6, nicméně poslední binární distribuce
vyžaduje novější verzi 1.7.}).

\section[Eclipse 3.5 a Eclipse 3.6]{Eclipse 3.5 a Eclipse 3.6\footnote{\url{http://www.eclipse.org}}}

Eclipse je integrované vývojové prostředí (IDE) šířené pod licencí Eclipse Public License, díky níž je volně dostupné
i pro komerční účely. Je jedním z nejpopulárnějších IDE pro programovací jazyk Java, ale seznam podporovaných jazyků
lze rozšířit díky mnoha dostupným zásuvným modulům.
\input{chapter052_spring}

\section[Log4j 1.2.16]{Log4j 1.2.16\footnote{\url{http://logging.apache.org/log4j/1.2/}}}
\label{chap:technologies:log4j}

Logování je zápis informací o běhu programu. Nejčastěji jsou tyto informace
ukládány jako textové záznamy do souborů nebo vypisovány na standardní výstup. Logování událostí má dva hlavní účely:
\begin{enumerate}
  \item Umožnit uživatelům systému získat přehled
  o~činnosti programu; zejména o chybách, ke kterým došlo za běhu programu.
  \item Zjednodušit programátorům vývoj -- umožnit např. odstraňování chyb, které
  se projevují jenom v produkčním prostředí, kde není dostupný debugger.
\end{enumerate}

Všechny naprogramované komponenty používají pro logování knihovnu log4j. Existují uživatelské nástroje, které umožňují
s logy ge\-ne\-ro\-va\-nými touto knihovnou jednoduše pracovat -- poskytují možnost je třídit a filtrovat podle
různých kritérií.

Knihovna je široce konfigurovatelná a umožňuje měnit nastavení logování bez nutnosti upravovat zdrojový kód programu a
vydávat různé verze podle požadavků, které se můžou velmi často měnit (zejména během vývoje a~debugování
pluginů). Příklad \ref{log_ex_01} na stránce \pageref{log_ex_01} ukazuje zdrojový kód v Javě pro jednoduché volání
loggeru log4j. Logování je možné konfigurovat globálně pro celou aplikaci nebo na úrovni jednotlivých balíků a tříd.
Konfigurace knihovny je standardně uložena v XML nebo v souboru \textit{properties} (viz příklad \ref{log_ex_02} na
stránce \pageref{log_ex_02}). Konfigurovat lze mj.:
\begin{description}
  \item[požadovanou úroveň logování] Logují se všechny události dané nebo
  vyšší důležitosti (knihovna obsahuje definice následujících úrovní: TRACE, DEBUG, INFO,
  WARN, ERROR, FATAL, OFF; je možné si nadefinovat i další úrovně, nicméně se to
  nedoporučuje); různé třídy můžou mít nastaveny různé úrovně.
  \item[appendery] Výstupy logování (např.  standardní výstup, textový soubor,
  XML soubor, TCP/IP socket, systémový log, zápisy událostí systému MS Windows,
  SMTP; lze naprogramovat vlastní výstupy).
  \item[formát dat] Umožňuje určit např. formát času, čísel atp.
\end{description}

\inclst{log4j_01}

\inclst{log4j_02}

\section[JUnit]{JUnit\footnote{\url{http://www.junit.org/}}}

JUnit je framework pro vytváření unit testů kódu v programovacím jazyce \java, integrovaný do vývojového prostředí
Eclipse.

\section{Prolog}
\label{chap:tools:prolog}

Prolog neměl podle původního návrhu být obecně použitelným progra\-mo\-va\-cím jazykem, byl zamýšlen jako nástroj pro
strojové zpracování textu v přirozeném jazyce (konkrétně ve francouzštině \cite{colmerauer010}). V dnešní době se Prolog
používá nejen v počítačové lingvistice, nýbrž i v ostatních odvětvích umělé inteligence.

Existuje mnoho distribucí Prologu, mezi nejpopulárnější patří Sicstus\footnote{\url{http://www.sicst.se}} a SWI Prolog
(šířený pod licencí GNU GPL). V této práci jsme použili dvě -- tuProlog a SWI Prolog. Tabulka \ref{tab:prolog_comp} na
stránce \pageref{tab:prolog_comp} obsahuje stručné porovnání obou distrobucí Prologu se zohledněním jejich
interoperability s programy běžícími ve virtuálním stroji \java.

\subsection*{tuProlog 2.4\footnote{\url{http://apice.unibo.it/xwiki/bin/view/Tuprolog/}}}
\label{chap:tools:prolog:tu}

Tato implementace Prologu umožňuje spouštět programy a vyhodnocovat dotazy v
tomto jazyce v rámci běžící instance virtuálního stroje \java. V naší práci je tuProlog použit
v knihovně \texttt{nlpat}, která slouží generování textových zpráv na základě
vzorců.

\subsection*{SWI Prolog 5.10.4\footnote{\url{http://www.swi-prolog.org/}}}

SWI Prolog je jedním z nejpopulárnějších interpretů tohoto jazyka. Na rozdíl od předchozího vyžaduje instalaci nativního
softwaru v operačním systému. Pro tuto práci jsme ho díky kvalitní podpoře DCG gramatik rozhodli použít v
knihovně \texttt{nlu\_prolog} (porozumění uživatelskému vstupu v při\-ro\-ze\-ném jazyce a jeho koverze do mezijazyka).

\begin{table}[ht!]
\begin{tabular}{|p{2.9cm}|p{5cm}|p{5cm}|}
\hline
& SWI Prolog s JPL & tuProlog \\ \hline
Interoperabilita & Vyžaduje instalaci do operačního sys\-tému. & Knihovna vytvořená v
Ja\-vě bez po\-u\-ži\-tí na\-tiv\-ních kom\-po\-nent.
\\
\hline
Výkon & Vyhovující. & Významně klesá v pří\-padě větších bází znalostí \\ \hline
Spolehlivost & Vyhovující. & Vyžaduje zlepšení, chyby jsou do\-konce v
parseru.\\ \hline Podpora více instancí Prologu v rámci jedné aplikace &
Chybí. Podpora více bází znalostí se ale dá simulovat např.  tak, že se jednotlivé soubory (programy) načtou do modulů.
& Libovolný po\-čet instancí v~rámci jed\-né aplikace. Jednotlivé instance
můžou pracovat s úplně jinou teorií, s~jinou sadou knihoven atd.
\\
\hline
Možnost roz\-ši\-řo\-vat aktuální te\-o\-rii. & Chybí, načítat lze
pouze kom\-p\-letní zdrojové soubory. & Za běhu je možné jedno\-duše načítat další
soubory, doplňovat definice predikátů atp. \\ \hline Podpora DCG gramatik. &
Velmi dobrá. & Nevyhovující. \\ \hline
\end{tabular}
\caption{Porovnání hlavních rysů SWI Prologu s knihovnou JPL a tuPrologu. Při
generování zpráv na základě vzorců se zejména hodila možnost mít více enginů
Prologu najednou, při porozumění textu pokročilá podpora DCG gramatik; proto
jsme se rozhodli použít dvě různé, navzájem nekompatibilní, distribuce.}
\label{tab:prolog_comp}
\end{table}

\subsection*{JPL\footnote{\url{http://www.swi-prolog.org/packages/jpl/}}}
Knihovna JPL zajišťuje spouštění programů napsaných v SWI Prologu a vyhodnocování dotazů v tomto jazyce z kódu Javy.

\section[Epos 2.4.83]{Epos 2.4.83\protect\footnote{\url{http://epos.ure.cas.cz/}}}

Epos je volně dostupný systém pro generování řeči z psaného textu; vyžaduje instalaci do operačního systému. Výchozí
instalace bez dodatečných prostředků poskytuje podporu češtiny a slovenštiny. Funguje jako server, klienti s ním komunikují pomocí
protokolu TTSCP\cite{epos:protocol}.

\section[SoX 14.3.2]{SoX 14.3.2\footnote{\url{http://sox.sourceforge.net/}}}

Sound eXchange (SoX) je program, který umožňuje konverzi mezi různými zvukovými formáty. Jako jedna z mála
volně dostupných aplikací podporuje formát ADPCM2, v němž zaznamenává zvuk \nab. Vyžaduje instalaci do operačního
systému.

\section[Rome 1.0]{Rome 1.0\footnote{\url{http://java.net/projects/rome/}}}

Rome je javovská knihovna pro práci se zdroji informací RSS. Umožňuje vysokoúrovňový přístup k informacím bez nutnosti
parsovat XML.

